// package com.example.aidemo.controller;
//
// import org.springframework.ai.chat.messages.UserMessage;
// import org.springframework.ai.chat.model.ChatResponse;
// import org.springframework.ai.chat.prompt.Prompt;
// import org.springframework.ai.content.Media;
// import org.springframework.ai.image.ImagePrompt;
// import org.springframework.ai.image.ImageResponse;
// import org.springframework.ai.moderation.Moderation;
// import org.springframework.ai.moderation.ModerationPrompt;
// import org.springframework.ai.moderation.ModerationResponse;
// import org.springframework.ai.openai.*;
// import org.springframework.ai.openai.api.OpenAiAudioApi;
// import org.springframework.ai.openai.audio.speech.SpeechPrompt;
// import org.springframework.ai.openai.audio.speech.SpeechResponse;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.core.io.ClassPathResource;
// import org.springframework.util.MimeTypeUtils;
// import org.springframework.web.bind.annotation.GetMapping;
// import org.springframework.web.bind.annotation.RequestMapping;
// import org.springframework.web.bind.annotation.RestController;
// import reactor.core.publisher.Flux;
//
// import java.io.FileNotFoundException;
// import java.io.FileOutputStream;
// import java.io.IOException;
// import java.util.List;
//
// @RestController
// @RequestMapping("/openai")
// public class OpenAiController {
//
//     @Autowired
//     private OpenAiChatModel openAiChatModel;
//
//     @Autowired
//     private OpenAiImageModel openAiImageModel;
//
//     @Autowired
//     private OpenAiAudioSpeechModel openAiAudioSpeechModel;
//
//     @Autowired
//     private OpenAiModerationModel openAiModerationModel;
//
//     @GetMapping("generate")
//     String generate(String userInput) {
//         // call方法中可以放Prompt对象 Message对象 提问字符串
//         return this.openAiChatModel.call(userInput);
//     }
//
//     // 自行扩展联系上下文怎么聊天
//     @GetMapping(value = "stream", produces = "text/plain;charset=UTF-8")
//     Flux<String> stream(String userInput) {
//         // call方法中可以放Prompt对象 Message对象 提问字符串
//         return this.openAiChatModel.stream(userInput);
//     }
//
//     @GetMapping("image")
//     public String image(String userInput) {
//         ImageResponse response = openAiImageModel.call(
//                 new ImagePrompt("A light cream colored mini golden doodle",
//                         OpenAiImageOptions.builder()
//                                 .quality("hd")
//                                 // .N(4) 生成图片的数量
//                                 .height(1024)
//                                 .width(1024).build())
//
//         );
//         return "<image src = '" + response.getResult().getOutput().getUrl() + "'>";
//     }
//
//     @GetMapping("audio")
//     public String audio(String userInput) throws IOException {
//         OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
//                 .voice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY)
//                 .responseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
//                 .speed(1.0f)
//                 .build();
//
//         SpeechPrompt speechPrompt = new SpeechPrompt(userInput, speechOptions);
//         SpeechResponse response = openAiAudioSpeechModel.call(speechPrompt);
//         byte[] output = response.getResult().getOutput();
//         FileOutputStream stream = new FileOutputStream("output.mp3");
//         stream.write(output);
//         stream.close();
//         return "音频生成成功...";
//     }
//
//     @GetMapping("moderation")
//     public String moderation(String userInput) {
//         ClassPathResource resource = new ClassPathResource("multimodal.test.png");
//         var userMessage = new UserMessage(
//                 userInput, // content
//                 List.of(new Media(MimeTypeUtils.IMAGE_PNG, resource))); // media
//
//         ChatResponse response = this.openAiChatModel.call(new Prompt(List.of(userMessage)));
//         return response.getResult().getOutput().getText();
//     }
//
//     @GetMapping("function")
//     String function(String userInput) {
//         ChatResponse response = this.openAiChatModel.
// call(new Prompt(userInput,OpenAiChatOptions.builder()
//         .function("currentWeather").build()));//启用函数调用
//         return response.getResult().getOutput().getText();
//     }
// }
